home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / programming / other / pmdev / e / demos / simplemenu.e < prev    next >
Encoding:
Text File  |  2000-02-28  |  6.5 KB  |  175 lines

  1. /* -- ----------------------------------------------------------------- -- *
  2.  * -- Program.....: SimpleMenu.e                                        -- *
  3.  * -- Author......: Daniel Kasmeroglu <raptor@cs.tu-berlin.de>          -- *
  4.  * -- Description.: Port from the example written by Henrik Isaksson.   -- *
  5.  * -- ----------------------------------------------------------------- -- *
  6.  * -- Original header:                                                  -- *
  7.  * --                                                                   -- *
  8.  * --   $VER: SimpleMenu.c 2.1 (05.09.98)                               -- *
  9.  * --                                                                   -- *
  10.  * --   Popup Menu example program                                      -- *
  11.  * --                                                                   -- *
  12.  * --   ©1996-1997 Henrik Isaksson                                      -- *
  13.  * --   All Rights Reserved.                                            -- *
  14.  * --                                                                   -- *
  15.  * --   Run and click the mouse in the window!                          -- *
  16.  * -- ----------------------------------------------------------------- -- */
  17.  
  18. /* -- ----------------------------------------------------------------- -- *
  19.  * --                              Options                              -- *
  20.  * -- ----------------------------------------------------------------- -- */
  21.  
  22. OPT PREPROCESS       -> enable preprocessor
  23.  
  24.  
  25. /* -- ----------------------------------------------------------------- -- *
  26.  * --                              Modules                              -- *
  27.  * -- ----------------------------------------------------------------- -- */
  28.  
  29. MODULE 'libraries/popupmenu' ,
  30.        'intuition/intuition' ,
  31.        'utility/tagitem'     
  32.  
  33. MODULE 'popupmenu'
  34.  
  35.  
  36. /* -- ----------------------------------------------------------------- -- *
  37.  * --                               Main                                -- *
  38.  * -- ----------------------------------------------------------------- -- */
  39.  
  40. ->»» PROC main
  41. PROC main()
  42. DEF ma_window : PTR TO window
  43. DEF ma_imsg1  : PTR TO intuimessage
  44. DEF ma_imsg2  : intuimessage
  45. DEF ma_menu   : PTR TO popupmenu
  46. DEF ma_result
  47.  
  48.   ma_result := TRUE
  49.  
  50.   -> open library
  51.   popupmenubase := OpenLibrary( 'popupmenu.library', 9 )
  52.   IF popupmenubase <> NIL
  53.  
  54.     ma_menu := PMMenu( 'Trashcan' ),
  55.                  PMItem( 'Open' ), PMEnd,
  56.                  PMItem( 'Submenu' ),
  57.                    PMSimpleSub,
  58.                      PMItem( 'Testing...' ), PMEnd,
  59.                      PMItem( '...gnitseT' ), PMEnd,
  60.                    PMEnd,
  61.                  PMEnd,
  62.                  PMBar, PMEnd,
  63.                  PMItem( 'Snapshot'   ), PMEnd,
  64.                  PMItem( 'UnSnapshot' ), PMEnd,
  65.                  PMBar, PMEnd,
  66.                  PMItem( 'Leave out' ), PMEnd,
  67.                  PMItem( 'Rename...' ), PMEnd,
  68.                  PMItem( 'Delete'    ), PMEnd,
  69.                  PMBar, PMEnd,
  70.                  PMItem( 'Empty' ), PM_USERDATA, 5, PMEnd,
  71.                  PMItem( 'Copy to'),
  72.                    PMSimpleSub,
  73.                      PMItem( 'RAM:' ), PMEnd,
  74.                      PMItem( 'DH0:' ), PMEnd,
  75.                      PMItem( 'DH1:' ), PMEnd,
  76.                      PMItem( 'DH2:' ), PMEnd,
  77.                      PMItem( 'DF0:' ), PMEnd,
  78.                    PMEnd,
  79.                  PMEnd,
  80.                  PMItem( 'Copy to'),
  81.                    PMSimpleSub,
  82.                      PMItem( 'RAM:'    ), PMEnd,
  83.                      PMItem( 'DH0:'    ), PMEnd,
  84.                      PMItem( 'DH1:'    ), PMEnd,
  85.                      PMItem( 'DH2:'    ), PMEnd,
  86.                      PMItem( 'DH3:'    ), PMEnd,
  87.                      PMItem( 'DH4:'    ), PMEnd,
  88.                      PMItem( 'DH5:'    ), PMEnd,
  89.                      PMItem( 'RAD:'    ), PMEnd,
  90.                      PMItem( 'DF0:'    ), PMEnd,
  91.                      PMItem( 'DF1:'    ), PMEnd,
  92.                      PMItem( 'DF2:'    ), PMEnd,
  93.                      PMItem( 'DF3:'    ), PMEnd,
  94.                      PMItem( 'PC0:'    ), PMEnd,
  95.                      PMItem( 'PC1:'    ), PMEnd,
  96.                      PMItem( 'TAPE:'   ), PMEnd,
  97.                      PMItem( 'MAC:'    ), PMEnd,
  98.                      PMItem( 'CD0: :)' ), PMEnd,
  99.                    PMEnd,
  100.                  PMEnd,
  101.                  PMItem( 'Copy to' ),
  102.                    PMSimpleSub,
  103.                      PMItem( 'RAM:Clipboards/'         ), PMEnd,
  104.                      PMItem( 'DH0:Storage/DOSDrivers/' ), PMEnd,
  105.                    PMEnd,
  106.                  PMEnd,
  107.                  PMItem( 'Copy to' ),
  108.                    PMSimpleSub,
  109.                      PMItem( 'RAM:' ), PMEnd,
  110.                      PMItem( 'DH0:' ), PMEnd,
  111.                    PMEnd,
  112.                  PMEnd,
  113.                End
  114.  
  115.     IF ma_menu <> NIL
  116.  
  117.       ma_window := OpenWindowTagList( NIL,
  118.       [ WA_IDCMP       , IDCMP_CLOSEWINDOW OR IDCMP_MOUSEBUTTONS , -> Open a little window
  119.         WA_RMBTRAP     , TRUE                                    ,
  120.         WA_DRAGBAR     , TRUE                                    ,
  121.         WA_WIDTH       , 150                                     ,
  122.         WA_HEIGHT      , 100                                     ,
  123.         WA_LEFT        , 150                                     ,
  124.         WA_TOP         , 0                                       ,
  125.         WA_TITLE       , 'SimpleMenu'                            ,
  126.         WA_CLOSEGADGET , TRUE                                    ,
  127.         TAG_END ] )
  128.  
  129.       IF ma_window <> NIL
  130.  
  131.         WHILE ma_result <> FALSE
  132.  
  133.           WaitPort( ma_window.userport )
  134.  
  135.           WHILE (ma_imsg1 := GetMsg( ma_window.userport ) ) <> NIL   -> get the message
  136.  
  137.             CopyMem( ma_imsg1, ma_imsg2, SIZEOF intuimessage )
  138.             ReplyMsg( ma_imsg1 )
  139.  
  140.  
  141.             IF ma_imsg2.class = IDCMP_CLOSEWINDOW
  142.               ma_result := FALSE
  143.             ELSEIF ma_imsg2.class = IDCMP_MOUSEBUTTONS
  144.  
  145.               -> The user has hit a mousebutton - time to open the menu!
  146.               ma_result := Pm_OpenPopupMenuA( ma_window,
  147.               [ PM_MENU , ma_menu       ,
  148.                 PM_CODE , ma_imsg2.code ,   -> must always be there
  149.                 TAG_END ] ) - 5
  150.  
  151.             ENDIF
  152.  
  153.           ENDWHILE
  154.  
  155.         ENDWHILE
  156.  
  157.         CloseWindow( ma_window )
  158.  
  159.       ELSE
  160.         PrintF( 'Window error !\n' )
  161.       ENDIF
  162.       Pm_FreePopupMenu( ma_menu )
  163.  
  164.     ELSE
  165.       PrintF( 'Menu error !\n' )
  166.     ENDIF
  167.  
  168.     CloseLibrary( popupmenubase )
  169.   ELSE
  170.     PrintF( 'Cannot open "popupmenu.library" v9+ !\n' )
  171.   ENDIF
  172.  
  173. ENDPROC
  174. ->»»>
  175.